/**
 * File Name: Obstakel.java
 *
 * Date: 18/12/2009
 *
 * Copyright (c) 2006 Michael LaLena. All rights reserved.  (www.lalena.com)
 * Permission to use, copy, modify, and distribute this Program and its documentation,
 *  if any, for any purpose and without fee is hereby granted, provided that:
 *   (i) you not charge any fee for the Program, and the Program not be incorporated
 *       by you in any software or code for which compensation is expected or received;
 *   (ii) the copyright notice listed above appears in all copies;
 *   (iii) both the copyright notice and this Agreement appear in all supporting documentation; and
 *   (iv) the name of Michael LaLena or lalena.com not be used in advertising or publicity
 *          pertaining to distribution of the Program without specific, written prior permission.
 */
package model;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.geom.Ellipse2D;
import java.util.Random;

/**
 * Een obstakel die in het aquarium kan geplaatst worden.
 * Obstakels zijn kunnen zowel ellipsvormig als rechthoekig zijn.
 *
 * @author Michiel Declercq
 * @author Stijn Delbeke
 * @author Dieter Deriemaeker
 * @author Gregory Nickmans
 *
 */
public class Obstakel extends AquariumObject {

    /**
     * Vorm van het obstakel
     */
    private Shape shape;

    /**
     * Random generator.
     * Static gemaakt om de getallen zo random mogelijk te genereren.
     *
     */
    private static Random rand = new Random(System.nanoTime());

    /**
     * Constructor.
     * Er wordt, afhankelijk van een pseudo-random boolean, een nieuwe ellips
     * of rechthoek aangemaakt met de gegeven parameters.
     *
     * @param x x-coördinaat
     * @param y y-coördinaat
     * @param dim Grootte van het obstakel
     * @param color Kleur van het obstakel
     */
    public Obstakel(int x, int y, Dimension dim, Color color) {
        super(x, y, dim, color);

        if (rand.nextBoolean()) {
            shape = new Ellipse2D.Double(location.x, location.y, dim.width, dim.height);
        }
        else {
            shape = new Rectangle(location, dim);
        }

    }

    /**
     * Geeft de vorm van het obstakel terug
     *
     * @return Shape
     */
    public Shape getShape() {
        return shape;
    }

    /**
     * Berekent het middelpunt van het obstakel en geeft dit terug
     *
     * @return Point middelpunt
     */
    public Point getCenter() {
        int x = location.x + size.width / 2;
        int y = location.y + size.height / 2;
        return new Point(x, y);
    }
}
